import java.io.Serializable;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Observable;

/**
 * Classe de gestion des auteurs.
 * @author IUT
 * @version 2.0
 */

public class Auteur extends Observable implements Serializable  {


	// ************************************************************************************************************
	// Constantes
	// ************************************************************************************************************

	private static final long serialVersionUID = 1L;

	// ************************************************************************************************************
	// Attributs
	// ************************************************************************************************************
		private String _nom;
		private String _prenom;
		
		//Attributs d'association
		                    
		private HashMap<String, Ouvrage> _ouvrages;         
		private HashMap<String, Article> _articles;    

		// ************************************************************************************************************
		// Constructeur
		// ************************************************************************************************************

		/**
		 * Constructeur d'un auteur
		 * @param nom , prenom
		 * construit 2 hashmaps vide : 
		 * 		l'une pour des ouvrages, 
		 * 		l'autre pour des articles
		*/
	
	public Auteur(String nom, String prenom){
		this.setNom(nom);
		this.setPrenom(prenom);
		this.setOuvrages(new HashMap<String, Ouvrage>());
		this.setArticles(new HashMap<String, Article>());
	}// Fin Constructeur
	
	
	// ************************************************************************************************************
			// Méthodes privées
			// ************************************************************************************************************
			
			// ------------------------------------------------------------------------------------------------------------
			// Affecteurs
			
				
		/**
		 * setter de l'attribut titre
		 * @param titre valeur à affecter à titre du periodique
		 */
		private void setNom(String nom){
			_nom = nom.toLowerCase();
		}

		private void setPrenom(String prenom){
			_prenom = prenom.toLowerCase();
		}
		
		private void setOuvrages(HashMap<String, Ouvrage> ouvrages){
			 _ouvrages = ouvrages;
		}
		
		private void setArticles(HashMap<String, Article> articles){
			_articles = articles;
		}
		
				
	
		//lie un ouvrage a l'auteur. Insere un ouvrage dans l'ensemble des ouvrages de l'auteur		
		private void lierOuvrage(String isbn, Ouvrage ouvrage){
			this.getOuvrages().put(isbn,ouvrage);
		} //fin lierOuvrage
		
		//lie un article a l'auteur. Insere un article dans l'ensemble des articles de l'auteur
		private void lierArticle(String titre, Article article){
			
			this.getArticles().put(titre, article);
		} //Fin lierArticle
		
		
		
		
		
		// ************************************************************************************************************
		// Méthodes publiques
	    // ************************************************************************************************************

	    // ------------------------------------------------------------------------------------------------------------
		// Accesseurs
				
		/**
		 * @return nom auteur
		 */
		public String getNom() {
			return _nom;
		}
		
		public String getPrenom() {
			return _prenom;
		}

		/** LISTE */
		//return la liste des ouvrages
		public HashMap<String, Ouvrage> getOuvrages(){
			return _ouvrages;
		}
		
		//return la liste des articles
		public HashMap<String, Article> getArticles(){
			return _articles;
		}
					
		
		/** un seul */
		//return l'ouvrage a partir d'un isbn
		public Ouvrage getOuvrage(String isbn) {
			return (Ouvrage) _ouvrages.get(isbn);
		}
		
		//return l'article a partir d'un titre
		public Article getArticle(String titre) {
		    return (Article) _articles.get(titre);
		}
			

		/**
		 * getter de l'ensemble des ouvrages
		 * @return une collection des ouvrages
		 */
		public Collection<Ouvrage> getOuvrage() {
			return _ouvrages.values();
		}
		
		/**
		 * getter de l'ensemble des articles
		 * @return une collection des articles issu du hashmap motcles de l'article
		 */
		public Collection<Article> getArticle() {
			return _articles.values();
		}
		
		
		
		
			//AJOUT d'un OUVRAGE A L'AUTEUR	
		
		public void ajouterOuvrage(Ouvrage ouvrage){
			String isbn = ouvrage.getIsbn();
		
			//liaison de l'auteur avec le titre de l'ouvrage
			this.lierOuvrage(isbn,ouvrage);
			
		}
			
		public void ajouterArticle(Article article){
			String titre = article.getTitre();
			
			//liaison de l'auteur avec le titre de l'article
			this.lierArticle(titre, article);
		}
	
	
}

